home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 43 / Mac Magazin and MacEasy Magazine CD - Issue 43.iso / Software / Multimedia / Sound / PlayerPRO 4.6 Dev.Kit / MADH Library 4.6 / MADLibrary Source / TickRemover.c < prev    next >
Encoding:
Text File  |  1998-01-23  |  4.8 KB  |  164 lines  |  [TEXT/CWIE]

  1. /********************                        ***********************/
  2. //
  3. //    Player PRO 4.6 - DRIVER SOURCE CODE -
  4. //
  5. //    Library Version 4.6
  6. //
  7. //    To use with MAD Library for Mac: Symantec, CodeWarrior and MPW
  8. //
  9. //    Antoine ROSSET
  10. //    16 Tranchees
  11. //    1206 GENEVA
  12. //    SWITZERLAND
  13. //
  14. //    COPYRIGHT ANTOINE ROSSET 1996, 1997, 1998
  15. //
  16. //    Thank you for your interest in PlayerPRO !
  17. //
  18. //    FAX:            (+41 22) 346 11 97
  19. //    PHONE:             (+41 79) 203 74 62
  20. //    Internet:         rosset@dial.eunet.ch or RossetAntoine@bluewin.ch
  21. //
  22. /********************                        ***********************/
  23.  
  24. #include "RDriver.h"
  25. #include "RDriverInt.h"
  26.  
  27. void MADTickLoopFill8( Channel *curVoice, long *ASCBuffer1, long *ASCBuffer2, long size, short left, short right)
  28. {
  29.     size++;
  30.     while( size-- > 0)
  31.     {
  32.         *ASCBuffer1 += left;        ASCBuffer1 += 2;
  33.         *ASCBuffer2 += right;        ASCBuffer2 += 2;
  34.     }
  35.     curVoice->prevPtr = 0L;
  36. }
  37.  
  38. void MADTickLoop8( long size, Channel *curVoice, long *ASCBuffer1, long *ASCBuffer2, MADDriverRec *intDriver)
  39. {
  40.     long    tLong, chnVol2, chnVol, LRVol = intDriver->LeftRight[ curVoice->ID];
  41.     
  42.     chnVol2        = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
  43.     LRVol = 100 - LRVol;
  44.     chnVol         = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
  45.  
  46.     while( size-- > 0)
  47.     {
  48.         if( curVoice->curLevel > 0) curVoice->curLevel--;
  49.         tLong = (curVoice->curLastWord * curVoice->curLevel) >> TICKREMOVESIZELEFT;
  50.         
  51.     //    Double ASCBUFFER
  52.         
  53.         *ASCBuffer1 += (chnVol * tLong) >> 6;        ASCBuffer1 += 2;
  54.         *ASCBuffer2 += (chnVol2 * tLong) >> 6;        ASCBuffer2 += 2;
  55.     }
  56. }
  57.  
  58. void MADTickRemoverStart8( Channel *curVoice, long    *ASCBuffer1, long    *ASCBuffer2, MADDriverRec *intDriver)
  59. {
  60.     long                i = intDriver->ASCBUFFER;
  61.     long                curDoVol = DoVol( curVoice);
  62.     
  63.     if(     curVoice->prevPtr    != curVoice->begPtr ||
  64.             (curVoice->curPtr    >= curVoice->maxPtr && curVoice->loopSize == 0) ||
  65.             curVoice->prevVol     != curDoVol)
  66.     {
  67.         Boolean    alreadyVol = false;
  68.     
  69.         if( curVoice->prevVol != curDoVol && curVoice->prevPtr    == curVoice->begPtr)
  70.         {
  71.             long diff = curVoice->prevVol - curDoVol;
  72.             
  73.             if( diff < 0)
  74.             {
  75.                 curVoice->curPrevVol    = curDoVol;
  76.                 
  77.                 if( curDoVol)
  78.                     curVoice->lastWord        = (curVoice->lastWord * diff) / curDoVol;
  79.                 else curVoice->lastWord = 0;
  80.             }
  81.             else
  82.             {
  83.                 curVoice->curPrevVol    = curVoice->prevVol;
  84.                 
  85.                 if( curVoice->prevVol)
  86.                     curVoice->lastWord        = (curVoice->lastWord * diff) / curVoice->prevVol;
  87.                 else curVoice->lastWord = 0;
  88.             }
  89.             
  90.             alreadyVol = true;
  91.         }
  92.         
  93.         if( curVoice->lastWord != 0)
  94.         {
  95.             curVoice->curLevel        = TICKREMOVESIZE;
  96.             curVoice->curLastWord    = curVoice->lastWord;
  97.             if( !alreadyVol) curVoice->curPrevVol    = curVoice->prevVol;
  98.             curVoice->lastWord        = 0;
  99.         }
  100.         
  101.         curVoice->prevPtr        = curVoice->begPtr;
  102.         curVoice->prevVol        = curDoVol;
  103.     }
  104.     
  105.     if( curVoice->curLevel > 0) MADTickLoop8( i, curVoice, ASCBuffer1, ASCBuffer2, intDriver);
  106. }
  107.  
  108. void MADTickRemoverLoop16( long size, Channel *curVoice, long    *ASCBuffer1, long    *ASCBuffer2, MADDriverRec *intDriver, long diff)
  109. {
  110.     if( curVoice->loopSize > intDriver->ASCBUFFER) 
  111.     {
  112.         long    LRVol, ii = size+1, tLong;
  113.         long    chnVol2, chnVol;
  114.         
  115.         curVoice->curLevel        = TICKREMOVESIZE;
  116.         curVoice->curLastWord    = diff;
  117.         curVoice->curPrevVol    = curVoice->prevVol;
  118.         curVoice->prevPtr        = curVoice->begPtr;
  119.         curVoice->prevVol        = DoVol( curVoice);
  120.         
  121.         LRVol         = intDriver->LeftRight[ curVoice->ID];
  122.         chnVol2        = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
  123.         LRVol         = 100 - LRVol;
  124.         chnVol         = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
  125.         
  126.         while( ii-- > 0)
  127.         {
  128.             if( curVoice->curLevel > 0) curVoice->curLevel--;
  129.             tLong = (curVoice->curLastWord * curVoice->curLevel) >> TICKREMOVESIZELEFT;
  130.             
  131.             *ASCBuffer1 += (chnVol * tLong) >> 6;        ASCBuffer1 += 2;
  132.             *ASCBuffer2 += (chnVol2 * tLong) >> 6;        ASCBuffer2 += 2;
  133.         }
  134.     }
  135. }
  136.  
  137. void MADTickRemoverLoop8( long size, Channel *curVoice, long *ASCBuffer1, long *ASCBuffer2, MADDriverRec *intDriver, long diff)
  138. {
  139.     if( curVoice->loopSize > intDriver->ASCBUFFER) 
  140.     {
  141.         long    LRVol, ii = size+1, tLong;
  142.         long    chnVol2, chnVol;
  143.         
  144.         curVoice->curLevel        = TICKREMOVESIZE;
  145.         curVoice->curLastWord    = diff << 8;
  146.         curVoice->curPrevVol    = curVoice->prevVol;
  147.         curVoice->prevPtr        = curVoice->begPtr;
  148.         curVoice->prevVol        = DoVol( curVoice);
  149.         
  150.         LRVol         = intDriver->LeftRight[ curVoice->ID];
  151.         chnVol2        = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
  152.         LRVol         = 100 - LRVol;
  153.         chnVol         = ((curVoice->curPrevVol * intDriver->VolExt[ curVoice->ID] * LRVol)/ REDUCEVOLUME);
  154.         
  155.         while( ii-- > 0)
  156.         {
  157.             if( curVoice->curLevel > 0) curVoice->curLevel--;
  158.             tLong = (curVoice->curLastWord * curVoice->curLevel) >> TICKREMOVESIZELEFT;
  159.             
  160.             *ASCBuffer1 += (chnVol * tLong) >> 6;    ASCBuffer1 += 2;
  161.             *ASCBuffer2 += (chnVol2 * tLong) >> 6;    ASCBuffer2 += 2;
  162.         }
  163.     }
  164. }